canon/tiers/01_Tier_1_Foundation/T1_Region_Page_Template [ACTIVE v2.0].md
Humanity Project — Canonical Region Page Specification (v2.0)
Joshua Alexander Milks. CONFIDENTIAL.
Last updated: July 15, 2026. (v2.0 — the post-spine-v3 consumption-contract revision; supersedes
v1.0 of May 3, 2026. The v1.0 20-section structure is PRESERVED; v2.0 adds the machine
consumption boundary, corrects retired references and stale vocabulary, and re-points the build
chains to the researched stack. Change log at the bottom.)
This doc owns the canonical template every region page conforms to. All 69 region pages
instantiate it. All downstream pipelines that consume region content read against this spec.
Authority position. Subordinate to the CVD on world canon and hard lines. Subordinate to
T0_Schema_Dictionary on Tier-0 schema. **Subordinate to the v3 story spine
(docs/SPINE_SCHEMA_v3.md + docs/spine/CH_*.md) on everything the spine's typed layer carries** —
see The Consumption Boundary below; field-level conflicts between an individual page and this
spec resolve to this spec, and conflicts between a page and the spine's typed rows resolve to
the spine.
Home and identity (ratified 2026-07-15). Region pages live at
_source/02_Tier_2_Region_Pages/<region_id>.md. region_id is the live snake_case slug
(the T0_Region_Index key); every page accesses region identity through that one key — no
T8_REGION_NNN or REG_NNN forms. The gate harness/check_region_page.py enforces this spec;
a page is not Build Ready until it passes.
Consumed by (the pipeline contracts, T1_Build_Pipeline_Contracts): §7 Region Build (authoring),
§6 Quest Writing, §1 UE5 Build (via the three-seam routing: NeoStack = judgment, UE-native
Python/Remote-Control = bulk/CI, Epic MCP = PCG), §2 asset generation (the ruled local split),
§3 music, §4 voice, §5 Cinematic, §10 SFX, and the recall layer (recall node <region_id>).
The v3 spine's typed layer is AUTHORITATIVE for everything it carries. A region page CONSUMES
and AGGREGATES those rows; it never re-authors them:
· climactic_affordance · protected — the page's Zone Catalog JOINS these and adds only what
the spine leaves downstream: geometry (area_bounds, zone polygons), traversal distances,
build sizing.
page carries derived per-region INDEXES over them (below), never divergent copies.
region_id → chapter_id(s) → site_id(s) → {boss, SQ, scene}.Anything expressible through that join is READ from the spine at build time.
What the page ADDS (its own authority): the region-scope substrate (culture, flora/fauna,
architecture, trade, music — Sections 2-10), geometry and build parameters, asset hooks, the
cross-regional web, quest dressing and side-quest seeds, and the aggregation indexes.
Every page opens with two required header blocks before Section 1.
A hard separator follows: HEADER END — BODY BELOW.
One row per zone: `zone_id | source site_id(s) (spine §3b) or region-ambient | terrain |
gameplay functions | ambient_threat | vril_density | climactic_affordances | protected |
area_bounds (geometry — page-side) | build_priority`. Rows sourced from spine site_ids copy
those fields VERBATIM from the §3b rows and may only ADD geometry/build fields.
The ten columns above are the base schema. Page-authored EXTENSION columns may be appended after
build_priority, but ONLY by the single sanctioned writer harness/apply_zone_catalog_columns.py
(never by hand); harness/regen_zone_catalog.py preserves them verbatim against a spine change, and
harness/extract_zone_catalog.py emits them into the FZoneRow CSV. The header and every data row grow
in lockstep — a row wider or narrower than the header hard-fails the reader and the regenerator. Every
extension cell obeys ONE shared value-encoding grammar so the downstream CSV consumer parses a single
shape:
precedent on T0_Boss_Encounter (for example direct=lunge_feint_dodge;stealth=stalk_tell_break). No
spaces around the = or the ;; a value never contains a pipe, a newline, a ;, or an =.
east, north, each a signed decimal-degree number in WGS84 (negative for south and west).
value yet, or a value another lane populates later). The writer's --populate-empty mode fills such
cells later, all-or-nothing per column, without ever overwriting a non-empty cell and without
schema churn.
These seven are the DECLARED extension columns of the Zone Catalog — the canonical allowed set that
grows the table beyond the ten base columns. A Zone Catalog column that is neither a base column nor
declared here is undeclared and is to be treated as an error by any gate that pins the column set;
this list is that gate's declaration home. Column order after build_priority is as listed:
site's published centroid with one fixed padding convention; the empty string for a fictional,
composite, or unlocatable zone (never a guessed box).
mapped from the zone's build_priority tier and role. Distinct from area_bounds, which stays
untouched (the scale-compression policy owns this parameter, geometry sizing owns that one).
fetch populates it (a guessed class would be false precision).
mixed), derived from the zone's terrain via the documented terrain→surface table; feeds the
MetaSounds footstep graph.
the protected flag and the page's explicit care-register overlay where one is ruled.
asset_category/asset_routing enum is ratified (an unratified enum value would be invented canon).
whose grammar matches the zone's terrain and functions; the empty string when no defensible match
exists (never a forced one).
additions (the only scene rows a page may AUTHOR).
forward_track) and the ws.* keys the region's forks touch.
recall node <region_id>.Terrain data plus the build chain (researched 2026-07-15, tech_research/GEODATA_TERRAIN_CHAIN):
DEM source Copernicus GLO-30 via the OpenTopography API (NASADEM fallback) per the region
bounding box · meters-per-vertex (the ONE scale-compression parameter — a per-region design
decision) · GDAL/rasterio alteration recipe (the fantasy-site carve/composite list, scripted) ·
Gaea detail-synthesis pass (erosion/river detail) · UE Landscape import sizing (8,129-vertex
actor cap; World Partition tiling) · ESA WorldCover landcover → material-layer weightmap mapping.
Time-period modifications from modern: sea level, coastline, glaciers, deforestation reversal,
river courses, volcanic activity. Climate and atmosphere. Vril sites per site: name, type,
recharge rate, cultural significance, access, build notes — sourced from T0_Vril_Site_Registry
As v1.0: native flora baseline pre-contact; herbalism Book-of-Trades entries (medicinal, toxic,
ritual, psychoactive, food). Build notes: foliage source-assets (Fab/Megascans matches, custom
models), density, palette, wind.
As v1.0 (mammals, birds, reptiles per the Serpent Thread, marine, familiar candidates with full
entries) — with the v2.0 registry direction: T0_Creature_Roster is POPULATED (132 rows) — the
page CONSUMES existing rows for creatures the spine already staged and FEEDS new region-ambient
rows; folkloric beings route to Creature_Roster.folklore_attribution (the old
T0_Folklore_Entity_Registry is RETIRED/absorbed). Familiar element types verify against canon.
As v1.0 in full (demographics, appearance for NPC design, dress, daily life, food, marriage/
gender/social structure, population centers with per-settlement data). §17.1 binds: living
peoples are rendered with care as weight and authenticity; the page records the represent-with-
care posture per community.
As v1.0 (cosmology, the vital-force/vril-parallel framing — vril reads mathematical/physical,
the Vril-Society firewall; ritual practices; spiritual leadership; myths; occult connections and
player rabbit holes). Registry feeds: School content → T0_School_Registry (13 rows exist —
consume + extend); folkloric beings → Creature_Roster.folklore_attribution.
As v1.0 in full (era weapons per weapon with build specs; the legendary candidate per the
72-weapon canon (36 Brute + 36 Trickery) with the four-ability pool; armor; military
organization; warrior culture; documented conflicts).
As v1.0 (settlement layout, residential, sacred/public, engineering feats, Book-of-Trades
engineering entries) — with the v2.0 asset rule: REAL cultural architecture is reference-built,
never raw-generated (§17.1); generation is sanctioned for fantastical/vril structures only.
As v1.0 (political structure; territories; the Five-Factors faction table per neighbor —
relationship type, player impact, standing on arrival, improve/destroy, questline; wars with
the player's role) — path language uses the ratified fork vocabulary: options are ACTION-keyed
with direction {generative, neutral, corrosive}; bands are DERIVED, never option labels.
As v1.0 in full (minerals per mineral with Book-of-Trades entries; blacksmithing/metallurgy;
trade goods, routes, currency, markets).
As v1.0 (documented instruments, musical theory, the composition briefs per track type, sound
design). RULED MUSIC STACK (Josh 2026-07-27, AIVA closed as skip): bulk, regional, and ambient cues
generate on the local benchmark-gated models (ACE-Step 1.5 / YuE); canonical and hero themes run
composer-in-loop with a human composer. Briefs are written vendor-neutral — instrumentation,
register, adaptive-class tag — never to a vendor prompt form
— with the v2.0 voice/audio tiering note: bulk ambient NPC lines route to the local no-clone
tier; hero/named voices to ElevenLabs behind the §4.4.1 clone-authorization gate.
As v1.0 (institutional form; family characters with three-path outcomes; quest encounters) —
with the v2.0 vocabulary + reveal rules: pre-Ch-65 encounters express player choice as
direction-keyed fork options; post-lock content is path_bucket-dispatched {TRULY_GOOD,
GOOD_ENOUGH, EVIL}; the page NEVER exceeds the reveal ladder at its chapters' positions (the
who-frame, Corr/Astrid, Cassius, and thesis clocks bind at page grain exactly as at spine grain).
As v1.0 (protagonist path through the region referencing the spine, never duplicating; the NPC
entry template with daily routines for the behavior system, three-path outcomes, dialogue hooks,
build notes). NPCs are MetaHuman-first; entries carry the persona fields per the entity-persona
system.
The v1.0 category list stands (Main Story · 22 Threads · SQ1-12 · 10 Trades · 72 Weapon
Legendaries · Familiar Bonds · School Curriculum · Folklore Combat · Grimoire Links · Seed
Defense · 20+ Infinite Side Quest Seeds) — with the v2.0 authority split: beat structure, fork
shapes, SQ stages/gates, and spatial requirements COME FROM the spine's typed graph (the §11
rows + beat/fork tables + §3b sites); the page adds region-scope quest DRESSING, the side-quest
seeds (each with premise, NPC, integrity implication via direction vocabulary, reward, plus the
v2.0 typed seed stub per Contracts §7.5 and the pipeline-review AM item — proposed_quest_type,
suggested_questline_id, a zone_ref or site_ref, and either a realized_beat_ref or an explicit
region_ambient marker — so each seed lands as bindable substrate rather than free prose; a seed that
fits no §6.5 quest_type routes its category-mint to the flag under the observed-enum-pin discipline
rather than being force-fit), and the convergence-node feed notes.
As v1.0 in full (home-base trade content, trade-master NPC, Book-of-Trades entries per region
across the ten trades).
As v1.0 (connections to visited regions with journal entries; serpent-thread continuity; the
Velheim pattern echo; vital-force parallels; seeds for future regions) — plus the v2.0 machine
tie: every connection cites its Cross_Cultural_Link_Graph row or the connective-web id
(IR-/ECV-/FR-/KM-/TL-class) where one exists; reciprocation discipline binds (A's claimed link
to B requires B's reciprocal claim).
As v1.0 (priority books, free primary sources, the verify list, rabbit holes — minimum five) —
with two v2.0 mandates: (1) every citation carries its use_class (SUBSTRATE ·
ESOTERIC-PRIMARY · AUTHORIAL-REBUTTAL · REFERENCE · TONE · DUPLICATE · FRINGE-SKIP, per
BOOKS_OWNED): SUBSTRATE cites as primary evidence; ESOTERIC-PRIMARY only in the L3
esoteric-grounding layer; AUTHORIAL-REBUTTAL may never be cited as truth; DUPLICATE names a
second copy or conversion of a work already carried under another SRC id and is never cited as
corroboration — cite the primary id. (2) Book-substrate citations arrive via the
query layer as (title, author, year, page) with SRC_ ids — the retrieval-provenance trail
(corpus_query_log) rides the page.
The v1.0 fields stand (environment areas, interiors, vegetation palette, NPC population and
behavior, performance budget) — re-pointed to the researched chain (tech_research/
UE_BUILD_AUTOMATION): registry data lands as DataTables (one C++ USTRUCT per registry); PCG
consumes the Zone Catalog + DataTables (Load Data Table → attribute sets); the Landscape import
runs the Python path (the C++ shim where stock Python falls short); scene rows drive Sequencer;
the three-seam routing rule governs which agent surface executes which step; MetaHuman batch
generation round-trips Epic's cloud (throughput budgeted per region); ws.* worldstate keys bind
to the save subsystem. **Localization-ready discipline binds from the first page: every
player-facing string lands in string tables (FText/String Table flow), never hard-coded — the
ship-everywhere ruling makes this non-negotiable.** Performance budget per v1.0 (platform,
frame rate, triangle/draw-call budgets, LODs, streaming).
As v1.0 in full (time display, fluctuation events, era glimpses, switching mechanics).
After Vimana activation (Ch 55), the player revisits from the air and sees the
integrity-mapped world states. **v2.0 vocabulary (the ratified two-axis model — the v1.0
"L3 Neutral / L5 Truly Bad" labels are RETIRED):** the five DERIVED texture bands are
{Truly Good · Good Enough · Drifting · Evil · Pure Evil (terminal)}; the five world-state
NAMES are {Luminous · Restored · Neutral · Damaged · Corrupted} (Neutral exists ONLY as the
WS3 world-state name, never a band or ending label); endings resolve by the Ch-65-locked
path_bucket {TRULY_GOOD, GOOD_ENOUGH, EVIL}. Visual differences per state. Modern Velheim
presence per state.
As v1.0, re-pointed: the per-region population plan (which staged SRC_ sources feed which
sessions), the processing status against the book pipeline (inbox → processed → registry), and
the build-ready date. (The v1.0 book-cost fields are superseded by the closed acquisition
ledger — BOOK_ACQUISITION_MINIMIZED, signed off + purchased.)
CONSUME (populated upstream; the page reads, joins, and never diverges): T0_Chapter_Index ·
T0_Boss_Encounter_Registry (282 rows) · T0_Creature_Roster (132) · T0_School_Registry (13) ·
T0_Thread_Grid · T0_Hard_Lines · T0_Vril_Site_Registry · T0_Worldstate_Variables · the spine
typed layer itself.
FEED (the page is the population source): T0_Region_Index (header metadata + zone geometry) ·
T0_Familiar_Registry (Section 3 candidates) · T0_Questline_Index (Section 13) ·
T0_Character_Index additions (Section 12) · T0_Weapon_Registry legendary details (Section 6) ·
Cross_Cultural_Link_Graph rows (Section 15) · T0_Source_Material_Registry provenance (Section
16) · the L1 fun-systems registries where sections touch them (T0_Dwelling_Registry,
T0_Vehicle_Registry, T0_Minigame_Registry, T0_Reputation_Ladder_Registry,
T0_Environment_Grammar_Registry, T0_Rune_Registry, T0_Hollow_Codex).
mesh-category tags.
check_region_page.py), full page.grammar (semicolon key=value, the composure_nodes precedent; bbox as w/s/e/n decimal degrees;
semicolon-joined list tokens; the empty string as the cited-or-empty marker) and the seven DECLARED
extension columns of the T0.2 column pack (zone_bounds_wgs84, meters_per_vertex, worldcover_biome,
footfall_surface, care_tier, asset_routing, environment_grammar_refs). The ten base columns and all
v2.0 sections are otherwise unchanged; area_bounds stays the geometry-sizing parameter, untouched by
the pack.
Boundary + the Machine Blocks (Zone Catalog, Derived Indexes, recall binding) added; home +
region_id ratified (snake_case at _source/02_Tier_2_Region_Pages/); the retired
T0_Folklore_Entity_Registry feed re-pointed to Creature_Roster.folklore_attribution; the
Section-19 stale vocabulary replaced with the ratified two-axis model; Section 1 re-pointed
to the researched terrain chain; Section 17 re-pointed to the researched UE-5.8 chain + the
localization-ready mandate; Section 16 gains per-citation use_class + provenance; the
registry contract split CONSUME/FEED (several v1.0 "feeds" are now populated upstream);
Drive-era paths dropped; the gate named. The 20-section structure and all v1.0 field
inventories are otherwise preserved.
v1.0 file history: 72 weapons canonical; the v4 questline categories; Velheim naming).